﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;

namespace ConsoleApplication27
{
    public partial class Liczba
    {



        public static Liczba operator +(Liczba a, Liczba b)
        {


            if (a.znak == b.znak)
            {



                List<ulong> wynik = new List<ulong>();
                int i = 0;

                a.element.Reverse();
                b.element.Reverse();



                ulong reszta = 0;
                ulong wynikdodawania = 0;








                int counta = a.element.Count();
                int countb = b.element.Count();


                for (; i < counta && i < countb; i++)
                {
                    ulong posredni = a.element[i] + b.element[i] + reszta;
                    wynikdodawania = posredni % a.system;
                    reszta = posredni / a.system;

                    wynik.Add(wynikdodawania);



                }


                Liczba x = (counta > countb) ? a : b;

                int countx = x.element.Count();

                while (i < countx)
                {
                    if (reszta == 1)
                    {
                        ulong posredni = x.element[i] + reszta;
                        wynikdodawania = posredni % x.system;
                        reszta = posredni / x.system;

                        wynik.Add(wynikdodawania);
                    }
                    else wynik.Add(x.element[i]);
                    i++;
                }
                if (reszta != 0) wynik.Add(1);






                wynik.Reverse();
                a.element.Reverse();
                b.element.Reverse();



                return new Liczba(wynik, a.system, a.znak);
            }
            else
            {
                int jakiznak = Pomoce.Porownaj(a, b);
                if (jakiznak == 1 && a.znak == '-') { a.znak = b.znak = '+'; a = b - a; a.znak = '-'; return a; }
                else { a.znak = b.znak = '+'; a = b - a; a.znak = '+'; return a; }

                if (b.znak == '-') return a - b;

            }




        }








    }




}
